#ifndef SPEC_H
#define SPEC_H

#include "Classe.h"
using namespace std;

/**
 * Cette classe implémente le mage spécialiste de l'univers AD&D.
 * @author Johan "Solo" Luisier
 */

class Spec : public Classe
{
 protected:
  static const unsigned int nbr_comp, /**< Nombre de compétences disponibles */
    nbr_restric, /**<  Nombre de restritions disponibles */
    nbr_restricUI; /**< Nombre de restrictions disponible en mode graphique */
  static const vector<ListComp> Comp, /**< Liste de compétences @see ListComp */
    Restric; /**< Liste de restrictions @see ListCom */
  static const vector< ListEnsComp > quel_spec; /**< Nom des Spécialistes */
  static const vector< vector< unsigned int > > ecoles_magie;/**< Corespondance spécialiste - écoles accessibles */
  static const unsigned int nbr_spec, /**< Nombre de spécialistes*/
    nbr_ecoles; /**< Nombre max d'école pour un spécialiste */
  /**
   * Enseble des prérequis sur les traits.
   */
  static const vector< vector< Prerequis > > Limites;
  /**
   * Ensemble des races autorisées pour cette Classe.
   */
  static const vector< set< string > > RacesAdmises;
  void calculNiveau();
  unsigned int calculeTAc0() const;
  void calculNivMag();
 public:
  Spec(unsigned int xp, const vector< unsigned int >& trait, unsigned int& PP,
       const string& race);
  Spec(unsigned int xp, const vector< unsigned int >& trait,
       const string& race);
  Spec(const vector< unsigned int >& trait, const bool& UI, const string& race);
  Spec(Classe *ptr);
  ~Spec();
  //void afficher_stats(ostream& os = blank());
  //void appliquerModif(const string& type);
  //void augmenterTalents(const unsigned int& bonus, const bool& lvl_up);
  void getJS(unsigned int *tab) const;
  //string getCompetence(const unsigned int& i) const;
  const vector<unsigned int>* getEnsembleCompetences(const unsigned int& nbr) const;
  void ecrireSorts(const string& nom_fichier, const bool& ecrase) const;
  void nbrSort(unsigned int sorts[], const unsigned int& taille) const;
  void ajoutSorts();
  void getPrixAcces(map<string, unsigned int>*& Map) const;
  /* StatusCode prerequisOK(const string& race, const unsigned int& ensemble = 99, const bool& complexe = false); */
};

#endif
